import callCheckVersion from './call-check-version'

// 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__'

export default function () {
  // #ifdef APP-PLUS
  return new Promise((resolve, reject) => {
    callCheckVersion().then(async (e) => {
      if (!e.result) return
      const {
        code,
        message,
        is_silently, // 是否静默更新
        url, // 安装包下载地址
        platform, // 安装包平台
        type // 安装包类型
      } = e.result

      // 此处逻辑仅为实例，可自行编写
      if (code > 0) {
        // 腾讯云和阿里云下载链接不同，需要处理一下，阿里云会原样返回
        const {
          fileList
        } = await uniCloud.getTempFileURL({
          fileList: [url]
        })
        if (fileList[0].tempFileURL) { e.result.url = fileList[0].tempFileURL }

        resolve(e)

        // 静默更新，只有wgt有
        if (is_silently) {
          uni.downloadFile({
            url: e.result.url,
            success: res => {
              if (res.statusCode == 200) {
                // 下载好直接安装，下次启动生效
                plus.runtime.install(res.tempFilePath, {
                  force: false
                })
              }
            }
          })
          return
        }

        /**
				 * 提示升级一
				 * 使用 uni.showModal
				 */
        // return updateUseModal(e.result)

        /**
				 * 提示升级二
				 * 官方适配的升级弹窗，可自行替换资源适配UI风格
				 */
        uni.setStorageSync(PACKAGE_INFO_KEY, e.result)
        uni.navigateTo({
          url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
          fail: (err) => {
            console.error('更新弹框跳转失败', err)
            uni.removeStorageSync(PACKAGE_INFO_KEY)
          }
        })
      } else if (code < 0) {
        // TODO 云函数报错处理
        console.error(message)
        reject(e)
      }
    }).catch(err => {
      // TODO 云函数报错处理
      console.error(err.message)
      reject(err)
    })
  })
  // #endif
}

/**
 * 使用 uni.showModal 升级
 */
function updateUseModal (packageInfo) {
  const {
    title, // 标题
    contents, // 升级内容
    is_mandatory, // 是否强制更新
    url, // 安装包下载地址
    platform, // 安装包平台
    type // 安装包类型
  } = packageInfo

  const isWGT = type === 'wgt'
  const isiOS = !isWGT ? platform.includes('iOS') : false
  const confirmText = isiOS ? '立即跳转更新' : '立即下载更新'

  return uni.showModal({
    title,
    content: contents,
    showCancel: !is_mandatory,
    confirmText,
    success: res => {
      if (res.cancel) return

      // 安装包下载
      if (isiOS) {
        plus.runtime.openURL(url)
        return
      }

      uni.showToast({
        title: '后台下载中……',
        duration: 1000
      })

      // wgt 和 安卓下载更新
      downloadTask = uni.downloadFile({
        url,
        success: res => {
          if (res.statusCode !== 200) {
            console.error('下载安装包失败', err)
            return
          }
          // 下载好直接安装，下次启动生效
          plus.runtime.install(res.tempFilePath, {
            force: false
          }, () => {
            if (is_mandatory) {
              // 更新完重启app
              plus.runtime.restart()
              return
            }
            uni.showModal({
              title: '安装成功是否重启？',
              success: res => {
                if (res.confirm) {
                  // 更新完重启app
                  plus.runtime.restart()
                }
              }
            })
          }, err => {
            uni.showModal({
              title: '更新失败',
              content: err
                .message,
              showCancel: false
            })
          })
        }
      })
    }
  })
}
